package com.jinzhi.jzweb.dao.resourceLibrary;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.jinzhi.jzweb.domain.StuClassDO;
import com.jinzhi.jzweb.domain.StudentClassesDO;
import com.jinzhi.jzweb.domain.vo.resourceLibrary.eventresourceVO.ClassesVO;
import com.jinzhi.jzweb.domain.vo.resourceLibrary.eventresourceVO.StudentVO;
import com.jinzhi.sys.domain.UserDO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EventResourceClassMapper extends BaseMapper<StudentClassesDO> {
    /**
     * 根据用户id 获取用户信息
     */
    public UserDO getSysUserByUserId(Long userId);

    List<StuClassDO> getStuClassById(Long classId);

    boolean reCreateClass(@Param("classId") Long classId, @Param("createTime") String createTime);

    /**
     * 根据用户名（唯一）获取用户信息
     */
    public UserDO getSysUserByUsername(String username);

    /**
     * 判断是否有重复学生加入班级 （前端已做）
     */
    public Long deDuplication(Long classId, Long userId);

    /**
     *
     */
    public UserDO verifyClass(String username);

    /**
     * 根据id获取班级
     */
    public ClassesVO getClassById(Long classId);

    /**
     * 根据创建者获取班级
     */
    public List<Long> getClassByCreaterId(Long createrId);

    /**
     * 批量保存班级信息
     */
    public boolean batchSaveStuClass(List<StuClassDO> stuClassesDOList);

    public boolean insertClass(@Param("s") StudentClassesDO studentClassesDO);

    /**
     * 获取学生信息
     */
    List<StudentVO> getStudentInfo(@Param("classId") Long classId, @Param("start") Integer start, @Param("end") Integer end);

    /**
     * 获取创建者管理的班级
     */
    List<ClassesVO> getClasses(@Param("classname") String classname, @Param("createrId") Long createrId,
                               @Param("start") Integer start, @Param("end") Integer end);

    /**
     * 获取班级学生数
     */
    Integer getStuNum(Long classId);

    /**
     * 退出班级
     */
    public boolean quitStu(@Param("userId") Long userId, @Param("classId") Long classId);

    /**
     * 更新班级名称
     */
    public boolean updateClass(@Param("classId") Long classId, @Param("className") String className,
                               @Param("updateId") Long updateId, @Param("updateTime") String updateTime);

    /**
     * 更新学生信息
     */
    public boolean updateStu(@Param("name") String name, @Param("mobile") String mobile, @Param("sex") Long sex,
                             @Param("password") String password, @Param("userId") Long userId, @Param("updateTime") String updateTime);

    /**
     * 新增班级
     *
     * @param stuClassDO
     * @return
     */
    public boolean addClass(StuClassDO stuClassDO);

    /**
     * 批量保存用户信息
     *
     * @param userDOList
     * @return
     */
    public boolean batchSaveStudent(List<UserDO> userDOList);

    /**
     * 保存用户信息
     *
     * @param userDO
     * @return
     */
    Long saveUser(@Param("user") UserDO userDO);

    /**
     * 老师根据班级名 获取管理的班级id
     *
     * @param classname
     * @param createrId
     * @return
     */
    Long getClassId(@Param("createrId") Long createrId, @Param("classname") String classname);

    /**
     * 获取所有用户名
     *
     * @return
     */
    List<String> getAllUsername();

    /**
     * 获取插入的用户id
     *
     * @param userDO
     * @return
     */
    Long getInsertUserId(@Param("user") UserDO userDO);

    /**
     * 判断班级是否存在
     *
     * @param classname
     * @param createrId
     * @return
     */
    Long isExistClass(String classname, Long createrId);

    /**
     * 获取班级列表
     *
     * @return
     */
    List<String> classList();

    /**
     * 获取用户所在班级id
     *
     * @param userId
     * @return
     */
    StuClassDO getUserClassId(Long userId);

    boolean deleteClass(Long classId);

    List<StuClassDO> getStuClass();
}
